const mongoose = require("mongoose");
// 引入转发包
const rp = require("request-promise");
// 内置模块 file-system 文件系统
const fs = require("fs");
// path解析文件路径 内置文件
const path = require('path');
const util = require("util");
// fs.unlink方法可以删除静态资源，参数为需要删除资源在电脑上的绝对路径
const unlink = util.promisify(fs.unlink);
// 方便统一修改
const baseUrl = "http://localhost:3001";

const update = async data => {
    const { _id, url, token } = data;

    var options = {
        method: 'PATCH',
        uri: `${baseUrl}/movies/${_id}`,
        body: {  //把对象交给具体model，把url以push的方式传给imges
            $push: {
                images: url
            },
        },
        headers: {
            'authorization': `Bearer ${token}`
        },
        json: true // Automatically stringifies the body to JSON
    };
    //如果try正常，正常执行返回值，如果错误，则把错误返回回去
    try {
        // rp转发并 返回返回值
        return await rp(options)
    } catch (error) {
        return error;
    }

}
const deleteImg = async ({ _id, url, token }) => {
    // 删除在资源服务器的图片
    // __dirname全局对象 显示当前文件绝对路径
    const routesPath = path.resolve(__dirname, "../public");
    const imgUrl = path.join(routesPath, url);  // join拼接
    await unlink(imgUrl); //删除图片（绝对路径）
    console.log("delposter utl",imgUrl)
    // 解除关联数据
    var options = {
        method: 'DELETE',
        uri: `${baseUrl}/movies/${_id}/imgs/${encodeURIComponent(url)}`,
        headers: {
            'authorization': `Bearer ${token}`,
        },
        json: true
    };
    //如果try正常，正常执行返回值，如果错误，则把错误返回回去
    try {
        // rp转发并 返回返回值
        return await rp(options)
    } catch (error) {
        return error;
    }
}


const delposter = async ({ _id, url, token }) => {
    // 删除在资源服务器的图片
    // __dirname全局对象 显示当前文件绝对路径
    const routesPath = path.resolve(__dirname, "../public");
    const imgUrl = path.join(routesPath, url);  // join拼接
    console.log("delposter utl",imgUrl);
    await unlink(imgUrl); //删除图片（绝对路径）

    // 解除关联数据 这里的问题
    var options = {
        method: 'DELETE',
        uri: `${baseUrl}/movies/${_id}/poster/${encodeURIComponent(url)}`,
        headers: {
            'authorization': `Bearer ${token}`,
        },
        json: true
    };
    //如果try正常，正常执行返回值，如果错误，则把错误返回回去
    try {
        // rp转发并 返回返回值
        return await rp(options)
    } catch (error) {
        return error;
    }
}


const updatePoster = async data => {
    const { _id, url, token } = data;

    var options = {
        method: 'PATCH',
        uri: `${baseUrl}/movies/${_id}`,
        body: {  //把对象交给具体model，把url以push的方式传给imges
            $push: {
                poseter: url
            },
        },
        headers: {
            'authorization': `Bearer ${token}`
        },
        json: true // Automatically stringifies the body to JSON
    };
    //如果try正常，正常执行返回值，如果错误，则把错误返回回去
    try {
        // rp转发并 返回返回值
        return await rp(options)
    } catch (error) {
        return error;
    }

}

// 暴露接口
module.exports = {
    update,
    deleteImg, updatePoster,delposter
}
